/**
 * @overview 通用的工具类
 */

/**
 * CommonUtil类
 * @namespace CommonUtil
 */

/**
 * 使用递归的方式实现进行数组/对象的深拷贝
 * @export
 * @param {object | array} obj
 * @return {object | array} 深拷贝后的对象
 * @memberof CommonUtil
 */
export function deepClone(obj) {
  //判断拷贝的要进行深拷贝的是数组还是对象，是数组的话进行数组拷贝，对象的话进行对象拷贝
  var objClone = Array.isArray(obj) ? [] : {}
  //进行深拷贝的不能为空，并且是对象或者是
  if (obj && typeof obj === 'object') {
    for (var key in obj) {
      if (Object.prototype.hasOwnProperty.call(obj,key)) {
        if (obj[key] && typeof obj[key] === 'object') {
          objClone[key] = deepClone(obj[key])
        } else {
          objClone[key] = obj[key]
        }
      }
    }
  }
  return objClone
}

/**
 * 判断是否为空，特殊情况{}、[]返回true，空格返回false
 * @param {*} param
 * @returns {boolean} 返回布尔值
 * @memberof CommonUtil
 */
export function isEmpty(param) {
  if (typeof param == 'boolean') {
    return !param
  }

  if (param && param instanceof Object) {
    if (Object.values(param).length > 0) {
      return false
    }
    return true
  } else {
    return !param && param !== 0
  }
}

/**
 * 是否为JSON数据
 * @param {string} str
 * @returns {boolean} 返回布尔值
 * @memberof CommonUtil
 */
export function isJSON(str) {
  try {
    if (typeof JSON.parse(str) == 'object') {
      return true
    }
  } catch (e) {
    return false
  }
  return false
}

/**
 * 字母大小写转换
 * @example toCase('dffdfs',1);
 * @param {string} str
 * @param {number} [type=0] 0:大写->小写 1:小写->大写
 * @returns {string} 返回转换后字符串
 * @memberof CommonUtil
 */
export function toCase(str, type = 0) {
  if (type == 0) {
    return str.toLowerCase()
  }
  return str.toUpperCase()
}
